'use strict'

process.chdir(__dirname)

const titbit = require('titbit')
const fs = require('fs')
const pg = require('pg')
const dbconfig = require('./dbconfig.js')
const wxkey=require('./wxkey.js')
const token=require('titbit-token')
const tbloader=require('titbit-loader')
let tok=new token({
    //token有效期，单位是秒
    expires:30,
    //必须是32位有效数字字母
    key:'1hdddkkkkcccccoooo98765444433322',
    //必须是16位有效数字字母
    iv:'1234567890opolmn'
})
//使用HTTP/1.1的客户端
const {httpcli}=require('gohttp')

//初始化数据库连接
let psql = new pg.Pool(dbconfig)

try{
    fs.accessSync('./images')
}catch(err){
    fs.mkdirSync('./images')
}

let cert_path = '/usr/local/share'

const app = new titbit({
    // 开启调试模式，会输出错误信息
    debug:true,
    globalLog:true,
    cert:`${cert_path}/wx.original5.xyz.pem`,
    key:`${cert_path}/wx.original5.xyz.key`
})
let tb=new tbloader();
tb.init(app);
//在app.service对象上添加一个属性
app.addService('tok',tok);
app.addService('psql',psql)
app.addService('imagePath',`${__dirname}/images`)

// c 就是 context
app.get('/',async c=>{
    c.send('ok')
})

app.get('/upload',async c=> {
    // c.helper 是助手函数模块，其中有对stream.pipe 的封装
    // c.reply 是响应对象，http/1.1 中指向 response, http/2 中指向 stream
    await c.helper.pipe('./upload.html', c.reply)
})
app.get('/user/:name/:age/:mobile',async c=>{
    console.log(c.param)
    c.send(c.param)
})
app.get('/mp-login/:code',async c=>{
    let auth_url=`https://api.weixin.qq.com/sns/jscode2session`
    +`?appid=${wxkey.appid}`
    +`&secret=${wxkey.secret}`
    +`&js_code=${c.param.code}`+`&grant_type=authorization_code`
    let ret=await httpcli.get(auth_url).then(res=>{
        return res.json()
    })
    c.send(tok.make(ret))
})

// // JS 无需加分号，谁用谁知道，有时也得加分号，括号开头很重要
// ;(async ()=>{

// })();

// 监听1234端口运行服务
app.run(2003)

